package com.njtech.pet.dao;

import com.njtech.pet.entity.Friend;
import com.njtech.pet.entity.User;
import org.apache.ibatis.annotations.Param;

import javax.jws.soap.SOAPBinding;
import java.util.List;

/**
 * @author lxj
 * Date:2020-03-10 10:20
 * Description:好友关系
 */
public interface FriendDao {

    /**
     * 插入一条数据
     * @param row 新纪录
     * @return 修改行数
     */
    int insert(Friend row);

    /**
     * 修改一条数据
     * @param row 新纪录
     * @return 修改行数
     */
    int updateByFriendId(Friend row);

    /**
     * 查找某一用户的好友
     * @param user 用户位置的用户
     * @param state Friend类的状态【用于区分查找好友请求与所有好友】
     * @param beginDate 起日期 可NULL
     * @param endDate 起日期 可NULL
     * @param orderState 用于描述排序的语句，如u.username asc
     * @return 用户集合
     */
    List<Friend> selectByUser(@Param("user")User user,
                              @Param("state")String state,
                              @Param("beginDate")String beginDate,
                              @Param("endDate")String endDate,
                              @Param("orderState")String orderState);

    /**
     * 查找某一用户的好友
     * @param friend 用户位置的用户
     * @param state Friend类的状态【用于区分查找好友请求与所有好友】
     * @param beginDate 起日期 可NULL
     * @param endDate 起日期 可NULL
     * @param orderState 用于描述排序的语句，如u.username asc
     * @return 用户集合
     */
    List<Friend> selectByFriend(@Param("friend")User friend,
                              @Param("state")String state,
                              @Param("beginDate")String beginDate,
                              @Param("endDate")String endDate,
                              @Param("orderState")String orderState);

    /**
     * select by friend id
     * @param id friend id
     * @return result
     */
    Friend selectByFriendId(@Param("id") Integer id);

    /**
     * 选取用户id对应uid,好友id对应fid,状态对应state的状态
     * @param uid 用户id
     * @param fid 好友id
     * @param state 记录的状态
     * @return 所有符合条件的结果
     */
    List<Friend> selectByUidAndFidAndState(@Param("uid") Integer uid, @Param("fid") Integer fid, @Param("state") String state);
}
